﻿using System.ServiceModel;
using System.Collections.Generic;
using SilenthinkContract.Domain;

namespace SilenthinkContract
{
    [ServiceContract(Namespace = ServiceContract.Namespace)]
    public interface IBaseService : IService
    {
        #region Location

        [OperationContract]
        IList<Location> GetLocations();

        #endregion

        #region HelpQuestion

        [OperationContract]
        bool CreateHelpQuestion(HelpQuestion o);

        [OperationContract]
        bool UpdateHelpQuestion(HelpQuestion o);

        [OperationContract]
        bool DeleteHelpQuestion(int id);

        [OperationContract]
        HelpQuestion GetHelpQuestion(int id);

        [OperationContract]
        IList<HelpQuestion> GetAllHelpQuestion();

        [OperationContract]
        PageList<HelpQuestion> GetPagedHelpQuestion(int index = 1, int size = 20, string title = null,
                                                    byte? category = null, bool? showOnMenu = null);

        #endregion

        #region EmailAccount

        [OperationContract]
        bool CreateEmailAccount(EmailAccount o);

        [OperationContract]
        bool UpdateEmailAccount(EmailAccount o);

        [OperationContract]
        bool DeleteEmailAccount(int id);

        [OperationContract]
        EmailAccount GetEmailAccount(int id);

        [OperationContract]
        IList<EmailAccount> GetAllEmailAccount();

        [OperationContract]
        PageList<EmailAccount> GetPagedEmailAccount(int index = 1, int size = 20);

        #endregion

        #region EmailTemplate

        [OperationContract]
        bool CreateEmailTemplate(EmailTemplate o);

        [OperationContract]
        bool UpdateEmailTemplate(EmailTemplate o);

        [OperationContract]
        bool DeleteEmailTemplate(int id);

        [OperationContract]
        EmailTemplate GetEmailTemplate(int id);

        [OperationContract]
        IList<EmailTemplate> GetAllEmailTemplate();

        [OperationContract]
        PageList<EmailTemplate> GetPagedEmailTemplate(int index = 1, int size = 20);

        #endregion
    }
}